package code.whmmm.util.simple;

import code.whmmm.util.collection.WrappedMap;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * <p><b>
 * 获取 value 工具类
 * </b></p>
 * <br/>
 *
 * @author Zero
 * @date 8/7/2019 4:44 PM
 */
public class ValueWrapper {

    private ValueWrapper() {
    }

    /**
     * @param s            验证的字符串
     * @param defaultValue s 为空时，返回的字符串
     * @return {@link String}
     */
    public static String getString(String s, String defaultValue) {
        if (StrUtil.isBlank(s)) {
            return defaultValue;
        }
        return s;
    }

    public static String getString(String s) {
        return getString(s, "");
    }

    public static String getString(Object s, String defaultValue) {
        if (s == null) {
            return defaultValue;
        }
        return getString(s.toString(), defaultValue);
    }

    /**
     * 获取 string 值 ,如果值为空，返回 ""
     *
     * @param s Object
     * @return string
     */
    public static String getString(Object s) {
        if (s == null) {
            return "";
        }
        return getString(s.toString(), "");
    }

    /**
     * 获取 int ，如果 Object v 为 null 或者 空字符串，返回 0
     *
     * @param v "123456"
     * @return int
     */
    public static int getInt(Object v) {
        int i = 0;
        if (v != null) {
            if (v instanceof Integer) {
                return (Integer) v;
            }

            i = Integer.parseInt(
                    getString(v.toString(), "0")
            );
        }
        return i;
    }

    /**
     * 为 null ，返回 0
     *
     * @param v
     * @return
     */
    public static int getInt(Integer v) {
        if (v == null) {
            return 0;
        }
        return v;
    }


    /**
     * 获取 long ，如果 Object v 为 null 或者 空字符串，返回 0
     *
     * @param v "123456"
     * @return int
     */
    public static long getLong(Object v) {
        long i = 0L;
        if (v != null) {
            if (v instanceof Long) {
                return (Long) v;
            }
            i = Long.parseLong(
                    getString(v.toString(), "0")
            );
        }
        return i;
    }

    public static long getLong(Long v) {
        if (v == null) {
            return 0L;
        }
        return v;
    }

    /**
     * 为 null 返回 0
     *
     * @param v object | string
     * @return double
     */
    public static double getDouble(Object v) {
        double i = 0L;
        if (v != null) {
            if (v instanceof Double) {
                return (Double) v;
            }
            i = Double.parseDouble(
                    getString(v.toString(), "0")
            );
        }
        return i;
    }

    public static double getDouble(Double v) {
        if (v == null) {
            return 0D;
        }
        return v;
    }

    /**
     * 为 null 返回 0
     *
     * @param v
     * @return
     */
    public static float getFloat(Object v) {
        float i = 0F;
        if (v != null) {
            if (v instanceof Float) {
                return (Float) v;
            }
            i = Float.parseFloat(
                    getString(v.toString(), "0")
            );
        }
        return i;
    }

    /**
     * 返回 list 数组，返回结果一定不为 null <br/>
     * 会引起 类型转换异常
     *
     * @param v 值
     * @return List
     */
    @SuppressWarnings(JavaWarning.UNCHECKED)
    public static List<Map<String, Object>> getList(Object v) {
        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
        if (v != null) {
            list = (List<Map<String, Object>>) v;
        }

        return list;
    }

    /**
     * 获取包装的 List map，
     * <span style='color:red'>慎用！</span>
     *
     * @param v
     * @return
     */
    @SuppressWarnings(JavaWarning.UNCHECKED)
    public static List<WrappedMap<String, Object>> getWrapList(Object v) {
        List<WrappedMap<String, Object>> list = new ArrayList<WrappedMap<String, Object>>();
        if (v != null) {
            list = (List<WrappedMap<String, Object>>) v;
        }

        return list;
    }


}
